<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浅拷贝</title>
</head>
<body>

</body>
<script>
    // 扩展运算符
    let outObj = {inObj: {a: 1, b: 2} }
    let newObj = {...outObj}
    newObj.inObj.a = 2
    console.log(outObj) // {inObj: {a: 2, b: 2}}
   // Object.assign()
    let outObj = { inObj: {a: 1, b: 2} }
    let newObj = Object.assign({}, outObj)
    newObj.inObj.a = 2
    console.log(outObj) // {inObj: {a: 2, b: 2}}
    // 区别
    // Object.assign()方法用于对象的合并,将源对象（source）的所有可枚举属性，复制到目标对象（target）。接收的第一个参数作为目标对象，后面的所有参数作为源对象。然后把所有的源对象合并到目标对象中。它会修改了一个对象，因此会触发 ES6 setter,(如果目标对象与源对象有同名属性，或多个源对象有同名属性，则后面的属性会覆盖前面的属性)
    // 扩展操作符（…）使用它时，数组或对象中的每一个值都会被拷贝到一个新的数组或对象中。它不复制继承的属性或类的属性，但是它会复制ES6的 symbols 属性。同样，如果用户自定义的属性，放在扩展运算符后面，则扩展运算符内部的同名属性会被覆盖掉。
</script>
</html>
